import {
	RequestApi
} from '../service/requestApi'

// export const getLoginCode = () => {
// 	return new Promise((resolve, reject) => {
// 		uni.login({
// 			provider: 'weixin', // 使用微信登录
// 			success: (data) => {
// 				// console.log(data)
// 				resolve(data)
// 			},
// 			fail: (err) => {
// 				reject(err)
// 			}
// 		})
// 	})
// }

export const refreshlogin = async (obj = {}) => {
	// let {
	// 	code
	// } = await RequestApi.getLoginCode()
	let {data} = await RequestApi.getRegisterCode({
		deviceNumber: uni.getSystemInfoSync().deviceId,
		...obj
	})
	uni.setStorageSync('userInfo', data)
}

export const isLogin = async () => {
	await refreshlogin()
	const userInfo = uni.getStorageSync('userInfo')
	if (userInfo) {
		return true
	} else {
		uni.showModal({
			title: '提示',
			content: '暂未登录,请登录后重试',
			showCancel: false,
			success: function(res) {
				if (res.confirm) {
					uni.switchTab({
						url: '/pages/index/index'
					})
				} else if (res.cancel) {
					console.log('用户点击取消')
				}
			}
		})
	}
}

export class Login {
	instance = null
	count = 0
	data = null

	static getInstance() {
		if (!this.instance) {
			this.instance = new Login()
		}
		return this.instance
	}

	// 优化的 getLoginCode 方法
	async getLoginCode() {
		// 返回一个新的 Promise，以确保按顺序执行登录逻辑
		return new Promise((resolve, reject) => {
			if (this.count === 0) {
				uni.login({
					force: true,
					provider: 'weixin', // 用户登录凭证（有效期五分钟）。开发者需要在开发者服务器后台调用 code2Session，使用 code 换取 openid、unionid、session_key 等信息
					success: (data) => {
						this.data = data
						resolve(data)
						this.count += 1
						// 优化 setTimeout 中的 this 指向问题，使用箭头函数
						setTimeout(() => {
							if (this.count > 0) {
								this.count -= 1
							}
						}, 3000)
					},
					fail: (err) => {
						// 增强的错误处理
						console.error('登录失败:', err)
						reject(err)
					}
				})
			} else {
				resolve(this.data)
			}
		})
	}
}
